package GUI;

import java.awt.Color;
import java.awt.Component;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

import Verwaltung.Daten.Aktivitaet;
import Verwaltung.Daten.Interfaces.IKlasse;
import Verwaltung.Daten.Interfaces.ILehrkraft;

/**
 * 
 * @author MaximumDataOverdrive
 * 
 */
public class PlanTableCellRenderer extends JPanel implements TableCellRenderer {
	private JLabel lblUhrzeit;
	private JLabel lblLehrer;
	private JLabel lblKlassen;
	private JLabel lblName;

	/**
	 * Konstruktor des CellRenderers für den Stundenplan.
	 */
	public PlanTableCellRenderer() {
		// TODO Auto-generated constructor stub
		initialize();
	}

	/**
	 * Diese Methode fügt die Label-Elemente der Stundenplananzeige hinzu.
	 */
	private void initialize() {
		setLayout(null);
		add(getLblName());
		add(getLblUhrzeit());
		add(getLblLehrer());
		add(getLblKlassen());
	}

	/**
	 * Diese Methode erzeugt die Zellen des Stundenplanes.
	 */
	@Override
	public Component getTableCellRendererComponent(final JTable arg0,
			final Object arg1, final boolean arg2, final boolean arg3,
			final int arg4, final int arg5) {

		if (arg1 instanceof Aktivitaet) {
			final Aktivitaet aktivi = (Aktivitaet) arg1;

			if (aktivi.isDummy()) {

				return new JPanel();
			}

			getLblName().setText(aktivi.getName());
			getLblUhrzeit().setText(aktivi.getZeitraum());// TODO anpassen an
															// neue api
			
			boolean hatBetreuer = false;
			boolean hatLehrer = false;
			String lehrer = "";
			for (final ILehrkraft lehr : aktivi.getLehrkraefte()) {
				lehrer += lehr.getName() + ", ";
				
				if(lehr.darfUnterrichten()) {
					hatLehrer = true;
				} else {
					hatBetreuer = true;
				}
				
			}
			
			if(hatBetreuer && hatLehrer) {
				if (lehrer.length() - 2 > 2) {
					lehrer = lehrer.substring(0, lehrer.length() - 2);
				}
	
				getLblLehrer().setText(lehrer);
				getLblLehrer().setForeground(Color.black);
			}
			else {
				
				getLblLehrer().setText("Lehrer/Betreuer fehlt");
				getLblLehrer().setForeground(Color.red);
			}

			String klassen = "";
			for (final IKlasse klass : aktivi.getKlassen()) {
				klassen += klass.getName() + ", ";
			}
			if (klassen.length() - 2 > 1) {
				klassen = klassen.substring(0, klassen.length() - 2);
				getLblKlassen().setText(klassen);
				getLblKlassen().setForeground(Color.black);
			}
			else {
				getLblKlassen().setText("Keine Klasse gewählt");
				getLblKlassen().setForeground(Color.red);
			}
			

			return this;
		}
		final JLabel lable = new JLabel();
		if(arg1 == null) {
			lable.setText("");
		}else {
			lable.setText(arg1+"");
		}
		return lable;
	}

	/**
	 * Diese Methode gibt das Label mit "Uhrzeit 18:00" zurück. Gibt es dieses
	 * nicht, wird es neu initialisert.
	 * 
	 * @return lblUhrzeit Label indem "Uhrzeit 18:00" steht.
	 */
	private JLabel getLblUhrzeit() {
		if (lblUhrzeit == null) {
			lblUhrzeit = new JLabel("Uhrzeit 18:00");
			lblUhrzeit.setBounds(0, 11, 124, 14);
		}
		return lblUhrzeit;
	}

	/**
	 * Diese Methode gibt das Label mit "Lehrer" zurück. Gibt es dieses nicht,
	 * wird es neu initialisert.
	 * 
	 * @return lblLehrer Label indem "Lehrer" steht.
	 */
	private JLabel getLblLehrer() {
		if (lblLehrer == null) {
			lblLehrer = new JLabel("Lehrer");
			lblLehrer.setBounds(0, 25, 124, 14);
		}
		return lblLehrer;
	}

	/**
	 * Diese Methode gibt das Label mit "Klassen" zurück. Gibt es dieses nicht,
	 * wird es neu initialisert.
	 * 
	 * @return lblKlassen Label indem "Klassen" steht.
	 */
	private JLabel getLblKlassen() {
		if (lblKlassen == null) {
			lblKlassen = new JLabel("Klassen");
			lblKlassen.setBounds(0, 36, 124, 14);
		}
		return lblKlassen;
	}

	/**
	 * Diese Methode gibt das Label mit "Name" zurück. Gibt es dieses nicht,
	 * wird es neu initialisert.
	 * 
	 * @return lblName Label indem "Name" steht.
	 */
	private JLabel getLblName() {
		if (lblName == null) {
			lblName = new JLabel("Name");
			lblName.setBounds(0, 0, 124, 14);
		}
		return lblName;
	}
}
